August, 2018

회귀분석

회귀분석의 유래

  • '회귀'라는 용어는 1885년 영국의 과학자 갈톤(F. Galton)이 발표한 '유전에 의하여 보통사람의 신장으로 회귀(Regression toward Meiocrity in Hereditary Stature'라는 논문에서 비롯되었다. 그는 아들의 키와 부모의 평균 키와의 관계를 분석하였는데, 부모의 키가 매우 클 때(또는 작을 때) 아들의 키는 일반적으로 평균키보다는 크지만(작지만) 그들의 부모만큼 크(작)지는 않다는 결론이다. 즉 부모의 키가 크(작)더라도 그 자식들은 결국 보통키로 회귀(돌아간다)한다는 뜻이다.

회귀분석이란

  • 반응변수(보통 y라 표기)와 설명변수(보통 x라 표기)의 관계를 규명하려는 분석
  • 변수간의 관계를 단순한 방정식을 이용해 설명
  • 예) 지각시간과 등짝맞는 횟수
    • 나는 일주일에 한번 여자친구와 데이트를 하기위해 만난다. 하지만 언젠가 부터 만나면 등짝을 한두대, 많을 때는 4~5대씩 맞았다. 이유를 알기 위해 생각을 해본 결과, 등짝을 맞는 가장 유력한 이유는 지각인것 같았다. 나는 등짝을 맞는 회수와 지각 시간을 적어놓기 시작했다. 정말로 지각 때문에 등짝을 맞는 걸까? 맞다면 10분을 지각하면 몇대를 맞을 것으로 예상할 수 있을까?

회귀분석

  • 앞서 지각 시간과 등짝 맞은 수의 자료에서 실제로 지각 시간이 길어지면 맞은 횟수가 증가할까?
  • 지각 시간과 맞은 수와의 관계가 없다면 지각 시간이 길어져도 맞은 횟수는 임의로(random) 분포해야 함
  • 즉, 자료를 잘 설명하는 직선(대표할 수 있는 직선)을 찾아서 직선의 기울기가 0이면 지각 시간과 맞은 수와의 관계가 없는 것이라 생각할 수 있고 음수 또는 양수의 기울기를 갖는다면 음의 관계 혹은 양의관계가 있음을 알 수 있음
  • 그렇다면 자료를 잘 설명하는 혹은 대표할 수 있는 직선이란 무엇인가?
  • 자료를 잘 설명하는 직선은 어떻게 찾을 수 있을까?

회귀분석

  • 하나의 속성을 가진 자료를 대표하는 값 중 가장 많이 사용하는 것은 평균임
  • 따라서 각 지각 시간(\(x\))마다 등짝을 맞은 수의 평균(\(E(y|x)\))를 지나는 직선이 그 자료를 대표하는 직선이라 생각 할 수 있음
  • 지각 시간과 등짝을 맞은 수는 다음과 같은 수학식으로 표현이 가능함
    • \(E(맞은 수|지각 시간) = \beta_0 + \beta_1 \times 지각 시간\)
    • \(맞은 수 = \beta_0 + \beta_1 \times 지각 시간 + \epsilon\)
  • 앞서 설명했듯이 기울기 \(\beta_1\)이 0이면 지각 시간과 등짝을 맞은 수는 관계가 없음
  • 따라서 우리의 주요 관심사는 \(\beta_1\)의 값이 무엇인지 더 나아가 직선을 만들기 위한 \(\beta_0\)도 알고 싶음(예측 등을 위해)
  • 자료에 적합하는 직선을 찾는 방법은 무수히 많음
  • 하지만 잘 적합하는 직선을 찾기위해 회귀분석에서는 최소제곱법이라는 방법을 사용함

최소제곱법

  • 회귀분석에서 자료에 잘 적합했다는 의미는 직선과 자료의 오차가 작다는 의미임
  • 직선과 자료의 오차는 관측치 개수만큼 생기므로 오차들의 절대값의 합이나 제곱합 등을 생각할 수 있음
  • 일반적으로 최소제곱법이란 오차 \(\epsilon\)의 제곱합을 최소가 되도록 하는 \(\beta_0\)와 \(\beta_1\)을 추정하는 방법임
  • 식을 통해 표현하면 다음과 같은 식을 최소로하는 \(\beta_0\)와 \(\beta_1\)을 찾는 것임
    • \(S(\beta_0, \beta_1) = \sum_{i = 1}^n \epsilon_i^2 = \sum_{i = 1}^n (y_i - \beta_0 - \beta_1 x_i)^2\)
  • 위의 식 \(S(\beta_0, \beta_1)\)는 \(\beta_0\)와 \(\beta_1\)에 대해 2차 함수임
  • 따라서 \(\beta_0\)와 \(\beta_1\)에 대한 미분이 0인 값을 찾으면 \(S(\beta_0, \beta_1)\)가 최소가 됨
    • \(\hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}\)
    • \(\hat{\beta}_1 = \frac{\sum(x_i - \bar{x})(y_i - \bar{y})}{\sum(x_i - \bar{x})^2} = \frac{s_{xy}}{s_{xx}}\)

최소제곱법 예제

  • 최소제곱법을 통해 지각 시간과 등짝 맞은 수의 자료를 설명하는 직선의 기울기와 절편을 찾아보자
Sxy = sum((x - mean(x)) * (y - mean(y)))
Sxx = sum((x - mean(x))^2)
beta1 = Sxy / Sxx
beta0 = mean(y) - beta1 * mean(x)
c(beta0 = beta0, beta1 = beta1)
##      beta0      beta1 
## -0.1333333  0.3696970

회귀직선 추정의 의미

  • 지금까지 최소제곱법을 이용해 자료를 잘 설명 혹은 대표하는 직선을 찾음
  • 최소제곱법으로 추정된 직선은 오차의 제곱합을 최소로 한다는 의미에서 자료를 잘 설명한다고 할 수 있음
  • 하지만 자료를 대표한다고 볼 수 있을까?
  • 앞서 말한 것과 같이 자료를 대표한다고 하는 의미는 평균을 지난다는 의미임
  • 직선이 각 지각 시간마다 맞은 수의 평균을 지난다면 그 자료를 대표하는 선이라 할 수 있음
  • 적절한 가정 하에서 최소제곱법으로 추정된 직선은 자료의 평균을 지나는 직선을 추정한 것임
    • 가정 : \(\epsilon_i \overset{i.i.d}{\sim} N(0, \sigma^2)\)

다중회귀분석(Multiple Linear Regression)

  • 앞의 예제에서처럼 등짝을 맞은 수(y)에 하나의 설명변수인 지각시간(x)으로 모형을 만든 것을 단순선형회귀분석(Simple Linear Regression)이라 함
  • 하지만 등짝을 맞은 수에 영향을 주는 설명변수가 꼭 하나일 필요는 없고 여러개가 될 수 있음
  • 즉, 여러 설명변수들에 의해 반응변수가 생겨났다면, 반응변수에 영향을 주는 설명변수로 하나를 생각하는 것 보다 여러개를 고려하는 것이 타당함
  • 이렇게 반응변수에 영향을 주는 요인으로 여러개의 설명변수를 고려한 모형을 다중선형회귀분석(Multiple Linear Regression)이라 함
  • 지각시간과 등짝 맞은 수의 자료에서 등짝 맞은 수에 영향을 주는 변수로 지각시간을 생각하였음
  • 하지만 등짝 맞은 수에 영향을 주는 변수로 다른 여러가지들을 고려할 수 있음
  • 또 한가지 영향을 주는 변수로 늦는다고 미리 연락을 했는지 안했는지 나타내는 변수를 생각 할 수도 있음
  • 이제 우리가 고려하는 회귀모형은 다음과 같음
    • \(맞은 수 = \beta_0 + \beta_1 \times 지각시간 + \beta_2 \times 미리 알림 여부 + \epsilon\)

다중회귀분석에서 회귀계수 추정

  • 다중선형회귀분석의 일반적인 형태는 다음과 같음
    • \(y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_p x_{ip} + \epsilon_i\)
  • 단순선형회귀분석과 마찬가지로 최소제곱법을 통해 오차의 제곱합을 최소로하는 \(\beta_i\)를 찾음
    • \(S(\beta_0, \beta_1, \ldots, \beta_p) = \sum_{i = 1}^n \epsilon_i^2 = \sum_{i = 1}^n (y_i - \beta_0 - \beta_1 x_{i1} - \beta_2 x_{i2} - \dots - \beta_p x_{ip})^2\)
  • \(S(\beta_0, \beta_1, \ldots, \beta_p)\) 역시 \(\beta_i\)에 대해 2차함수이기 때문에 각 \(\beta_j\)에 대해 편미분한 값이 0이 되는 \(\beta_j\)를 찾음

회귀계수에 대한 추론

  • 등짝을 맞은 수에 지각 시간과 미리 알림 여부와 관계가 영향을 미친다면 직선의 기울기인 \(\beta_i\)는 0이 아닐 것임
  • 하지만 우리가 구한 회귀계수는 모집단 전체 자료를 이용한 것이 아닌 표본을 통해 추정한 것임
  • 따라서 추정한 회귀계수가 0인지 아닌지 검정할 필요가 있음
  • 회귀계수에 대한 추론
    • 가설 \(H_0 : \beta_j = 0\) vs \(H_1 : \beta_j \neq 0\) or \(H_1 : \beta_j > 0\) or \(H_1 : \beta_j < 0\)
    • 검정통계량 : \(t = \frac{\hat{\beta}_j}{se(\hat{\beta}_j)}\)
    • 기각역 : \(|t| > t_{\alpha/2}(n - p - 1)\)
      \(\hspace{2.0cm}\) \(t > t_{\alpha}(n - p - 1)\)
      \(\hspace{2.0cm}\) \(t < -t_{\alpha}(n - p - 1)\)
  • 여기서 \(se(\hat{\beta_j}) = \sqrt{c_{j, j}} \cdot s\)이고 \(c_{j,j}\)는 \((X^TX)^{-1}\)의 j번째 대각원소(설명 생략), \(s^2\)은 모수 \(\sigma^2\)의 추정량

회귀모형의 적합도와 분산분석

  • 이전 장에서는 회귀계수의 개별적인 검정을 시행함
  • 개별적인 설명변수가 반응변수에 영향을 주는지 검정하는 것외에 설명변수로 구성된 회귀모형이 자료를 설명하는지 또는 얼마나 설명하는지 따져볼 필요가 있음
  • 먼저 \(Y\)의 \(i\)번째 관측값 \(Y_i\)가 표본평균 \(\bar{Y}\)에 대해 갖는 총변동(total sum of squares; SST) \(\sum_{i=1}^n(Y_i - \bar{Y})^2\)를 보면 이는 다음과 같이 두 가지 변동의 합으로 나타낼 수 있음
    • \(\sum_{i=1}^n(Y_i - \bar{Y})^2 = \sum_{i=1}^n(Y_i - \hat{Y}_i)^2 + \sum_{i=1}^n(\hat{Y}_i - \bar{Y})^2\)
    • 여기서 \(\hat{Y}_i = \hat{\beta}_0 + \hat{\beta}_1 x_{i1} + \dots + \hat{\beta}_p x_{ip}\)
  • \(\sum_{i=1}^n(\hat{Y}_i - \bar{Y})^2\)은 추정된 회귀식에 의해 설명되는 변동(regression sum of squares; SSR), \(\sum_{i=1}^n(Y_i - \hat{Y}_i)^2\)은 회귀식에 의해 설명되지 않은 나머지 변동임(error sum of squares; SSE)
  • 만일 추정된 회귀식이 표본의 모든 변동을 완전히 설명하고 있다면 즉, 모든 관측값들이 추정된 회귀직선 위에 있을 경우, 설명되지 않은 변동 SSE의 값은 0이 됨
  • 따라서 총제곱합 SST중에서 SSE가 차지하는 부분이 작으면(SSR이 차지하는 부분이 크면) 추정된 회귀식의 설명력이 높다고 할 수 있음

회귀모형의 적합도와 분산분석

  • 앞서 설명한 총제곱합 SST과 설명된 변동 SSR을 이용해 회귀직선의 적합도를 나타내는 측도로 정의하고 이를 결정계수(coefficient of determination)라 함
    • \(R^2 = \frac{설명된 변동}{총변동} = \frac{SSR}{SST} = 1 - \frac{SSE}{SST}\)
  • 결정계수의 값은 항상 0과 1사이에 있으며 1에 가까울수록 추정된 회귀직선 주위에 관측값들이 밀집해 있음을 뜻하고 이는 회귀직선이 관측값들을 잘 설명하고 있다는 의미

회귀모형의 적합도와 분산분석

  • 회귀계수의 유의성과는 별개로 회귀식의 유의성을 검정할 필요가 있음
  • 회귀식이 유의하다는 의미는 고려한 설명변수 중 유의한 변수가 적어도 하나는 있다는 의미임
  • 분산분석과 마찬가지로 회귀계수를 개별적으로 유의수준 0.05에서 검정하게 되면 오류를 범할 전체 확률이 고려한 유의수준을 넘게 됨
  • 따라서 고려한 유의수준에서 회귀계수가 적어도 하나는 0이 아님을 검정하기 위해서는 분산분석표를 이용한 \(F\)검정이 사용됨
  • 회귀식의 유의성 검정
    • 가설 : \(H_0 : \beta_1 = \beta_2 = \dots = \beta_p = 0\) vs \(H_1 : not \ H_0\)

예제 : 등짝

smash_fit = lm(count ~ time + kakao, data = smash_dat)
summary(smash_fit)
## 
## Call:
## lm(formula = count ~ time + kakao, data = smash_dat)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -1.20  -0.35   0.00   0.35   1.20 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  -0.4000     1.3223  -0.302   0.7711  
## time          0.4000     0.1604   2.494   0.0413 *
## kakao         0.2000     0.9212   0.217   0.8343  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7171 on 7 degrees of freedom
## Multiple R-squared:  0.7584, Adjusted R-squared:  0.6894 
## F-statistic: 10.99 on 2 and 7 DF,  p-value: 0.006933

모형선택(변수선택)

  • 다중회귀분석에서는 다음과 같은 상황이 발생할 수 있음
    1. 필요한 변수가 모형에 포함되지 않은 경우
    2. 불필요한 변수가 모형에 많이 포함된 경우
  • 필요한 변수가 모형에 포함되지 않은 경우
    • 회귀계수의 편향(bias)이 발생
    • 잔차가 특정 패턴을 보임(오차의 가정을 만족하지 않음)
  • 불필요한 변수가 모형에 많이 포함된 경우
    • 회귀계수의 분산이 커짐(유의한 회귀계수가 검정에서 유의하지 않게 나올 수 있음)
    • 모형의 해석 어려움
    • 예측오차가 커질 수 있음

모형선택(변수선택) : 필요한 변수가 모형에 포함되지 않은 경우

  • 시뮬레이션 예제

모형선택(변수선택) : 필요한 변수가 모형에 포함되지 않은 경우

simul_fit = lm(y ~ . - 1, data = simul_dat)
summary(simul_fit)
## 
## Call:
## lm(formula = y ~ . - 1, data = simul_dat)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.294359 -0.043645  0.000202  0.063692  0.263941 
## 
## Coefficients:
##           Estimate Std. Error t value Pr(>|t|)    
## intercept  0.50254    0.01052   47.77   <2e-16 ***
## x1         0.99676    0.01601   62.25   <2e-16 ***
## x2         0.99465    0.01095   90.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1043 on 97 degrees of freedom
## Multiple R-squared:  0.9906, Adjusted R-squared:  0.9903 
## F-statistic:  3414 on 3 and 97 DF,  p-value: < 2.2e-16

모형선택(변수선택) : 필요한 변수가 모형에 포함되지 않은 경우

simul_fit2 = lm(y ~ . - 1 - x2, data = simul_dat)
summary(simul_fit2)
## 
## Call:
## lm(formula = y ~ . - 1 - x2, data = simul_dat)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.8085 -0.6385 -0.1786  0.5147  2.3165 
## 
## Coefficients:
##           Estimate Std. Error t value Pr(>|t|)    
## intercept 0.465044   0.097034   4.793 5.86e-06 ***
## x1        0.001056   0.107779   0.010    0.992    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9632 on 98 degrees of freedom
## Multiple R-squared:  0.1922, Adjusted R-squared:  0.1757 
## F-statistic: 11.66 on 2 and 98 DF,  p-value: 2.865e-05

모형선택(변수선택) : 불필요한 변수가 모형에 많이 포함된 경우

모형선택(변수선택)

  • 회귀모형 구축 단계
    • 예비단계 : 반응변수에 영향을 줄 것으로 판단되는 설명변수들을 결정(경험적으로 알려져 있는 사실이나 이론적 배경 등을 참고, 이러한 정보들이 없는 경우에는 비용이 허용하는 한 되도록 많은 설명변수들을 고려)한 다음 예비모형(다중선형회귀모형)을 구축
    • 예비모형 수정 : 우선 예비모형을 적합시킨 후, 선형성, 등분산성, 독립성 등 광범위한 회귀진단을 실시
    • 변수선택 : 예비모형에 포험된 설명변수들 중에서 반응변수를 잘 설명해 주는 핵심적인 설명변수들을 찾음(모든 가능한 회귀 고려, 단계별로 모형 선택)
    • 회귀진단 및 모형의 선택 : 최적으로 판단된 모형에 대해 회귀진단, 가정의 타당성 검토, 영향력 관측치, 이상치의 존재 여부 확인
    • 선택된 모형에 대한 확인 : 이론이나 경험에 의한 예상과 비교, 설명변수가 타당한지, 회귀계수 추정값의 부호나 크기가 부합한지 등을 검토

모형선택(변수선택) 기준

  • 모든 가능한 모형 중에서 다음이 최소로 되는 모형을 선택
  • 결정계수
    • \(R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST}\)
    • \(R^2\)는 설명변수가 추가되면 항상 증가하는 단점을 가지고 있음
    • 따라서 변수를 추가하면서 \(R^2\)의 증가폭이 크지않은 시점을 선택
  • 수정된 결정계수
    • 결정계수가 계속 증가하는 단점을 보완한 방법
    • \(R^2_{adj} = 1 - \frac{SSE/(n - p)}{SST/(n - 1)}\)
    • 결정계수와 달리 설명변수가 추가되어도 항상 증가하지 않음
    • 따라서 \(R^2_{adj}\)가 최대가 되는 모형을 최적의 모형으로 선택

모형선택(변수선택) 기준

  • 평균제곱오차(MSE)
    • \(y_i - \hat{y}_i\)의 제곱합을 자유도로 나눈 형태로 분산의 추정값임
    • \(MSE = \frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{n - p - 1} = s^2\)
    • 구성한 모형이 관측치에 잘 적합했는지 나타냄
    • MSE가 최소인 모형을 최적의 모형으로 선택
    • 하지만 예측모형을 구성한 경우는 MSE가 너무 작은 모형은 의심할 필요가 있음(과적합 우려)
  • \(C_p\) 통계량
    • \(C_p = \frac{SSE_p}{s^2} - [n - 2(p + 1)]\)
    • \(s^2\)은 최대모형(고려한 설명변수가 모두 포함된 모형)에서 구한 분산
    • \(C_p\)값을 최소로 하는 모형은 적합값의 분산과 편향의 제곱의 합을 최소화 한다는 의미
    • \(C_p \approx p + 1\)이거나 \(C_p \leq p + 1\)이 되는 모형 중 다른 값을 비교하여 최적의 모형판단

모형선택(변수선택) 기준

  • AIC와 BIC
    • AIC : \(n\text{ln}(\frac{SSE_p}{n}) + 2(p + 1)\)
    • AIC의 값이 작을수록 좋은 모형이라고 판정
    • AIC를 최소화하는 것은 예측오차분산의 추정량을 최소화하는 모형을 선택하는 것과 동일
    • BIC : \(n\text{ln}(\frac{SSE_p}{n}) + (p + 1)log(n)\)
    • BIC는 AIC보다 모형의 복잡성에 더 큰 벌칙을 줌
    • BIC는 일반적으로 AIC보다 참모형을 선택하는 비율이 더 큼

모형선택(변수선택) 기준 : 예제

require(regbook)
require(leaps)

data("usedcars")
head(usedcars, n = 10)
##    price year mileage   cc automatic
## 1    790   78  133462 1998         1
## 2   1380   39   33000 2000         1
## 3    270  109  120000 1800         0
## 4   1190   20   69727 1999         1
## 5    590   70  112000 2000         0
## 6   1120   58   39106 1998         1
## 7    815   53   95935 1800         1
## 8    450   68  120000 1800         0
## 9   1290   15   20215 1798         1
## 10   420   96  140000 1800         0

모형선택(변수선택) 기준 : 예제

lm_used_car = lm(price ~ ., data = usedcars)
summary(usedcars)
##      price             year          mileage             cc      
##  Min.   : 270.0   Min.   : 15.0   Min.   :  8000   Min.   :1798  
##  1st Qu.: 620.0   1st Qu.: 42.0   1st Qu.: 53222   1st Qu.:1800  
##  Median : 795.0   Median : 68.0   Median : 76388   Median :1998  
##  Mean   : 804.6   Mean   : 66.0   Mean   : 79132   Mean   :1923  
##  3rd Qu.: 997.5   3rd Qu.: 81.5   3rd Qu.:113598   3rd Qu.:2000  
##  Max.   :1380.0   Max.   :129.0   Max.   :140000   Max.   :2000  
##    automatic     
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :1.0000  
##  Mean   :0.5667  
##  3rd Qu.:1.0000  
##  Max.   :1.0000

모형선택(변수선택) 기준 : 예제

usedcars_reg = regsubsets(price ~ ., data = usedcars, nbest = 4)
summ_reg = summary(usedcars_reg)
tmp = with(summ_reg, round(data.frame(rss, rsq, adjr2, cp, bic), digits = 3))
data.frame(summ_reg$outmat, tmp)
##          year mileage cc automatic       rss   rsq adjr2      cp     bic
## 1  ( 1 )    *                       619638.9 0.768 0.760  34.621 -37.089
## 1  ( 2 )            *              1038891.7 0.612 0.598  75.638 -21.585
## 1  ( 3 )                         * 1826993.4 0.317 0.293 152.740  -4.650
## 1  ( 4 )               *           2403226.1 0.102 0.070 209.114   3.574
## 2  ( 1 )    *                    *  411219.5 0.846 0.835  16.231 -45.988
## 2  ( 2 )    *       *               483775.0 0.819 0.806  23.329 -41.113
## 2  ( 3 )    *          *            544908.8 0.796 0.781  29.310 -37.543
## 2  ( 4 )            *            *  697150.7 0.740 0.720  44.204 -30.151
## 3  ( 1 )    *       *            *  293331.9 0.890 0.878   6.697 -52.721
## 3  ( 2 )    *          *         *  356186.9 0.867 0.852  12.847 -46.897
## 3  ( 3 )    *       *  *            431366.3 0.839 0.820  20.202 -41.152
## 3  ( 4 )            *  *         *  654467.4 0.755 0.727  42.028 -28.646
## 4  ( 1 )    *       *  *         *  255538.1 0.905 0.889   5.000 -53.458

모형선택(변수선택) 기준 : 예제

require(olsrr)
usedcars_reg2 = ols_step_all_possible(lm(price ~ ., data = usedcars))
par(mfrow = c(2, 2))
plot(usedcars_reg2)

모형선택(변수선택) 기준

  • 모든 가능한 회귀는 설명변수의 개수가 많으면 계산량이 많아 적용하기 어려움(\(2^p\)번의 계산 필요)
  • 따라서 설명변수의 개수가 많을 때 계산량을 줄일 수 있는 방법이 필요
  • 가장 많이 사용되는 방법은 단계별 회귀(stepwise regression)임
    • 상수항 또는 필수 설명변수들만 있는 모형에서 시작하여 기준에 만족하는 변수를 순차적으로 포함이나 제거 시켜 나가는 방법
  • 비슷하게 전진선택방법(forward selection)과 후진제거방법(backward elimination)이 있음
    • 전진선택법과 후진제거법은 단계별 회귀와 비슷하지만 전진선택법은 한번 포함된 설명변수는 다시 제거되지 않고 반대로 후진제거법은 한번 제거된 변수는 다시 포함되지 않음

모형선택(변수선택) 기준

step(lm(price ~ ., data = usedcars), direction = "both", k = 2)
## Start:  AIC=281.5
## price ~ year + mileage + cc + automatic
## 
##             Df Sum of Sq    RSS    AIC
## <none>                   255538 281.50
## - cc         1     37794 293332 283.64
## - mileage    1    100649 356187 289.46
## - automatic  1    175828 431366 295.20
## - year       1    398929 654467 307.71
## 
## Call:
## lm(formula = price ~ year + mileage + cc + automatic, data = usedcars)
## 
## Coefficients:
## (Intercept)         year      mileage           cc    automatic  
##  525.286961    -5.799637    -0.002263     0.388787   165.312633

회귀진단(Regression Diagnostics)

회귀진단

  • 동일한 회귀직선 및 결정계수가 나옴
  • 4종류의 데이터 모두 회귀모형 적합이 잘 적합되었는가?
  • 회귀분석의 많은 경우, 가정이 맞는지 적절하게 밝혀지지 않은 채로 이용되어 그 결과가 오용되는 경우가 있음
##       F_value beta0 beta1 r_sq
## Set A   17.99     3   0.5 0.67
## Set B   17.97     3   0.5 0.67
## Set C   17.97     3   0.5 0.67
## Set D   18.00     3   0.5 0.67

회귀진단

  • 모형 가정
    • 선형성 : \(y = \beta_0 + \beta_1 x_1 + \dots + \beta_p x_p + \epsilon\)
    • 독립성 : \(\epsilon_i, i = 1, 2, \ldots, n\) are independent
    • 등분산성 : \(var(\epsilon) = \sigma^2\)
    • 정규성 : \(\epsilon \sim N(0, \sigma^2)\)
  • 모형의 가정에 대한 검토가 필요
  • 잔차 분석, 이상치, 영향력 관측치 탐색 등이 필요

회귀진단

  • 잔차 : 관측치에서 회귀모형의 적합값(예측값)을 뺀 값
    • \(e_i = y_i - \hat{y}_i\)
    • 잔차는 오차(\(\epsilon_i\))를 추정한 값
    • 따라서 잔차를 이용해 오차의 가정을 검토 가능
  • 잔차의 표준화
    • 내 표준화잔차 : 잔차의 분산이 과소추정되는 경향이 있어 표준화해준 잔차
    • \(r_i = \frac{e_i}{s\sqrt{1 - h_{ii}}}\)
    • 외 표준화잔차 : 내 표준화잔차는 관측치 \(y_i\)가 분자와 분포의 계산에 동시에 사용되기 때문에 특이점을 찾아내지 못할 경우가 생김
    • \(r^*_i = \frac{e_i}{s_{(i)}\sqrt{1 - h_{ii}}}\) 여기서 \(s_{(i)}\)는 i번째 관측치를 제외시킨 후 회귀모형을 적합했을 때 얻어지는 \(s^2\)의 제곱근

회귀진단

  • 이상치 : 다른 데이터와 동떨어진 값
    • 비정상적으로 크게(혹은 작게) 기록된 값
    • 매우 작은 확률로 발생한 큰 값(혹은 작은 값)
  • 이상치 탐색
    • 내 표준화잔차는 \(r^2_i / (n - p - 1) \sim B(1/2, (n - p - 2)/2)\) 이지만 편의상 근사적으로 표준정규분포를 따른다고 보고 절대값이 2이상이면 이상치로 판단
    • 외 표준화잔차는 \(r^*_i \sim t(n - p - 2)\) 이지만 관측치가 충분히 큰 경우 표준정규분포를 따르므로 절대값이 2보다 크면 이상치로 판단
  • 영향력 관측치 : 회귀계수와 예측값에 큰 영향을 주는 관측치

  • 영향력 관측치 탐색 : \(i\)번째 데이터를 제외하고 비교
    • \(\hat{\beta}_{(i)}\) : \(i\)번째 데이터를 제외하고 구한 회귀계수
    • \(\hat{y}_{(i)}\) : \(i\)번째 데이터를 제외하구 구한 적합값(예측값)

회귀진단

  • 영향력 관측치
  • Cook's Distance
    • \(C_i = \frac{(X\hat{\beta} - X\hat{\beta}_{(i)})^T(X\hat{\beta} - X\hat{\beta}_{(i)})}{(p + 1)\sigma^2}\)
    • \(C_i \geq 3.67/(n - p - 1)\) 이면 영향력 관측치로 구분
  • DFBETAS
    • \(DFBETAS_{j,i} = \frac{\hat{\beta_j} - \hat{\beta_{j(i)}}}{s_{(i)}\sqrt{(X^TX)^{-1}_{jj}}}\)
    • \(DFBETAS\)값이 2 또는 \(2/\sqrt{n}\)이상이면 영향력 관측치로 구분
  • DFFITS
    • \(DFFITS_i = \frac{\hat{y}_i - \hat{y}_{(i)}}{se(\hat{y}_i)}\)
    • \(DFFITS\)값이 2 또는 \(2\sqrt{p/n}\)이상이면 영향력 관측치로 구분

회귀진단 : Set A

par(mfrow = c(2, 2))
plot(lm_result[[1]])

회귀진단 : Set B

par(mfrow = c(2, 2))
plot(lm_result[[2]])

회귀진단 : Set C

par(mfrow = c(2, 2))
plot(lm_result[[3]])

회귀진단 : Set D

par(mfrow = c(2, 2))
suppressWarnings(plot(lm_result[[4]]))

회귀진단 : 중고차 자료

lm_used_car = lm(price ~ ., data = usedcars)
par(mfrow = c(2, 2))
plot(lm_used_car)

회귀진단 : 중고차 자료

infl_res = influence.measures(lm_used_car)
print(infl_res$infmat, digits = 2)
##     dfb.1_ dfb.year dfb.milg  dfb.cc dfb.atmt   dffit cov.r  cook.d   hat
## 1  -0.2072 -0.10854  0.32713  0.1793   0.1926  0.4466  1.34 4.0e-02 0.215
## 2  -0.1877  0.03342 -0.34735  0.2475   0.2344  0.8333  0.46 1.2e-01 0.105
## 3  -0.1030 -0.08699  0.00892  0.1095   0.0637 -0.2346  1.37 1.1e-02 0.156
## 4   0.0047  0.01624 -0.01173 -0.0059  -0.0032 -0.0209  1.51 9.1e-05 0.190
## 5   0.1123  0.10246 -0.13508 -0.1250   0.1346 -0.2463  1.36 1.2e-02 0.158
## 6  -0.0789  0.13648 -0.18121  0.0871   0.1124  0.2980  1.22 1.8e-02 0.119
## 7  -0.1423  0.10058 -0.10620  0.1468  -0.1017 -0.2414  1.38 1.2e-02 0.165
## 8  -0.2769  0.30850 -0.32065  0.2570   0.2499 -0.5807  1.12 6.6e-02 0.187
## 9   0.1547 -0.06602 -0.05437 -0.1388   0.0315  0.2155  1.59 9.6e-03 0.251
## 10  0.1309 -0.05621  0.16917 -0.1377  -0.1022  0.3393  1.33 2.3e-02 0.174
## 11  0.0014 -0.00067  0.00031 -0.0014  -0.0017 -0.0031  1.33 2.0e-06 0.078
## 12 -0.2788  0.08519 -0.02219  0.3108  -0.3387  0.5660  0.84 6.0e-02 0.113
## 13  0.1091 -0.02779  0.02870 -0.1277   0.1598 -0.2463  1.25 1.2e-02 0.110
## 14  0.5293 -0.22998 -0.16659 -0.4775   0.1171  0.7314  1.14 1.0e-01 0.239
## 15 -0.0243 -0.03730 -0.03217  0.0443  -0.1002  0.1396  1.46 4.0e-03 0.178
## 16 -0.4718  0.09220  0.10187  0.4546  -0.2912 -0.7000  0.66 8.8e-02 0.113
## 17  0.0812 -0.11235  0.03078 -0.0685  -0.0996 -0.1780  1.40 6.6e-03 0.153
## 18  0.1461  0.13855  0.01941 -0.1805  -0.1588 -0.5110  0.79 4.9e-02 0.089
## 19  0.0877 -0.45430  0.73311 -0.1599   0.3662 -0.8755  1.51 1.5e-01 0.373
## 20  0.1730 -0.08498  0.00757 -0.1648   0.1028  0.2679  1.24 1.5e-02 0.116
## 21  0.1476  0.08123 -0.20448 -0.1333  -0.1399 -0.3080  1.29 1.9e-02 0.150
## 22 -0.2137 -0.01187  0.08413  0.1925   0.1635 -0.3098  1.25 2.0e-02 0.137
## 23 -0.1280  0.07155  0.08360  0.1051   0.1371  0.2489  1.42 1.3e-02 0.185
## 24  0.2230  0.43065 -0.10331 -0.2630  -0.0999  0.7305  1.11 1.0e-01 0.229
## 25  0.0013  0.00035 -0.00069 -0.0013  -0.0014 -0.0027  1.33 1.6e-06 0.079
## 26  0.0691  0.20498 -0.14114 -0.0858   0.1256  0.2525  1.64 1.3e-02 0.278
## 27 -0.0813 -0.09304 -0.04816  0.1275  -0.2500  0.3402  1.26 2.3e-02 0.151
## 28  0.2853 -0.57118  0.44752 -0.2655  -0.3787 -0.8207  0.69 1.2e-01 0.150
## 29  0.0263  0.01937  0.01086 -0.0292  -0.0162  0.0705  1.47 1.0e-03 0.171
## 30  0.0073  0.01673 -0.01021 -0.0102   0.0171 -0.0261  1.51 1.4e-04 0.188

Reference

  • 강근석, 유현조(2016) \(\lceil\) R을 활용한 선형회귀분석 \(\rfloor\), 교우사.